﻿#define _CRT_SECURE_NO_WARNINGS 1



//一个数组中只有两个数字是出现一次，其他所有数字都出现了两次。
//编写一个函数找出这两个只出现一次的数字。
//例如：
//有数组的元素是：1，2，3，4，5，1，2，3，4，6
//只有5和6只出现1次，要找出5和6.


//方法一
//增加一个计数数组
//

//#include<stdio.h>
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,1,2,3,4,6 };
//	int count[7] = { 0,0,0,0,0,0,0 };
//	for (int i = 0; i < 10; i++)
//	{
//		count[arr[i]]++;
//	}
//	for (int i = 0; i < 7; i++)
//	{
//		if (count[i] == 1)
//			printf("%d ", i);
//	}
//	return 0;
//}


//第二种方法加入结构体？
// struct num{
// int num;
// int count=0
// }p;
// 好像不可以
// 
//第三种方法加入计数数组，（太麻烦，舍弃）


//void findTwoNum(int arr[], int n, int* pnum1, int* pnum2)
//{
//	int i;
//	int sum = 0;
//	for(i = 0; i < 9; i++)
//		{
//			sum ^= arr[i];
//		} //先找到两个数互相异或的结果
//	int pos;
//	for (i = 0; i < 32; i++)
//	{
//		if (sum & 1 << i)
//		{
//			pos = i;
//			break;
//		}
//	} //再找到有分歧的一位。在这一位上，两个数一定是一个1一个0
//	​
//	* pnum1 = *pnum2 = 0;
//	for (i = 0; i < 10; i++)
//	{
//		if (arr[i] & 1 << pos)
//		{
//			*pnum1 ^= arr[i]; //这一位是1的，放在数1里
//		}
//		else
//		{
//			*pnum2 ^= arr[i]; //这一位是0的，放在数2里
//		}
//	}
//}